﻿using CryptoQrUtilities.Cryption;
using NUnit.Framework;

namespace CryptoQrUtilities.UnitTests
{
    /// <summary>
    /// Tests for the <see cref="CryptedEnvelope"/> type.
    /// </summary>
    [TestFixture]
    public class CryptedEnvelopeTests
    {
        /// <summary>
        /// Verify that the input text for the constructor of <see cref="CryptedEnvelope"/> does not allow 'null'.
        /// </summary>
        [Test]
        public void VerifyConstructorPlainInputParameterTest()
        {
        }

        /// <summary>
        /// Verify that input for the constructor of the RSA encrpytors' enumeration does not allow 'null' or empty.
        /// </summary>
        [Test]
        public void VerifyConstructorRsaProvidersParameterTest()
        {
        }

        /// <summary>
        /// Verify that the <see cref="CryptedEnvelope.HasMultipleAesKeys"/> matches the creation of the envelope.
        /// In case of multiple keys - verify the right amount is written to the encrypted buffer's contents.
        /// </summary>
        [Test]
        public void VerifyHasMultipleAesKeysMatchesEnvelopeCreationTest()
        {
        }

        /// <summary>
        /// Verify the encryption of given text with one AES key.
        /// </summary>
        [Test]
        public void VerifyEncryptionDecryptionOneAesKeyTest()
        {
        }

        /// <summary>
        /// Verify the encryption of a given text with multiple AES keys different in size of RSA encryptors.
        /// </summary>
        [Test]
        public void VerifyEncryptionDecryptionMultipleAesKeysDifferentSizeTest()
        {
        }

        /// <summary>
        /// Veridy the encryption of a given text with multiple AES keys with the same size of RSA encryptors.
        /// </summary>
        [Test]
        public void VerifyEncryptionDecryptionMultipleAesKeysSameSizeTest()
        {
        }

        /// <summary>
        /// Verifies that when the given AES keys cannot be decrypted using the local container - throws.
        /// </summary>
        [Test]
        public void VerifyNoKeyDecryptsWithOneKey()
        {
        }

        /// <summary>
        /// Verify that when neither of the AES keys can be decrypted using the local container - throws.
        /// </summary>
        [Test]
        public void VerifyNoKeyDecryptsWithMultipleKeysTest()
        {
        }

        /// <summary>
        /// Verify that envelopes encrypted by earlier versions are decryptable by later versions.
        /// </summary>
        [Test]
        public void VerifyCryptoEnvelopeBackwardCompatibilityTest()
        {
            
        }
    }
}
